Jump to content
BulForum.com

mySQL при задаване на varchar повече от 35 не запазва


jdru

Recommended Posts

Имам mySQL и като се въвеждат нещата се запазва само това което е до около 30-35 символ, от там нататък - неще.

Макар и да му е зададено при създаване на таблицата например varchar (150),

Предполагам че проблема е някъде в настройките, но незнам къде.

ОС Linux.

 

Благодаря.

Link to comment
Share on other sites

А ти сигурен ли си, че в заявките ескейпваш текста като хората? пробвал ли си през конзолата с mysql командата как се държи при инсърт?

Може да е от бъгава версия, проблем с харда и какво ли не (да, може да се случи при такива проблеми).

Link to comment
Share on other sites

А ти сигурен ли си, че в заявките ескейпваш текста като хората? пробвал ли си през конзолата с mysql командата как се държи при инсърт?

Може да е от бъгава версия, проблем с харда и какво ли не (да, може да се случи при такива проблеми).

Проблема е при въвеждане на кирилица, с латиницата няма проблем с броя на символите.

Зададено му е utf-8, както в конфигурацията на php, така и на mySQL-a. През конзолата дава същия лош резултат с кирилицата.

Други идеи? :(

Link to comment
Share on other sites

Проблема е при въвеждане на кирилица, с латиницата няма проблем с броя на символите.

Зададено му е utf-8

е ами мн ясно прочети повече за utf-8

Link to comment
Share on other sites

е ами мн ясно прочети повече за utf-8

И аз си помислих за това, но как ще обясниш, че е задал varchar(150), а му събира само около 35 символа кирилица. При това не точно 35, а около.

Пробвай с команда SET NAMES 'utf8' преди всякакви операции.

Не вреди и да погледнеш логовете на mysql-a, там би трябвало да пише разни неща, примерно нарушава се някое STRICT правило.

Link to comment
Share on other sites

Тъп въпрос но пробва ли от конзолата да вкараш над 35 символа кирилица? Проблема може да не е в самия mySQL а нещо в самата страница... Вероятността е малка но преди съм си патил като съм изключвал такива ужким дребни вероятности и вместо да погледна за елементарния проблем тръгвам да търся какво ли не а после се оказва толкова тъпо че се чудя как изобщо не съм го видял още при пръв поглед...

Link to comment
Share on other sites

Тъп въпрос но пробва ли от конзолата да вкараш над 35 символа кирилица? Проблема може да не е в самия mySQL а нещо в самата страница... Вероятността е малка но преди съм си патил като съм изключвал такива ужким дребни вероятности и вместо да погледна за елементарния проблем тръгвам да търся какво ли не а после се оказва толкова тъпо че се чудя как изобщо не съм го видял още при пръв поглед...

Да, през конзолата дава същия резултат както и през php-то, т.е. латиницата е ОК, а кирилицата е ограничена от към символи...

Link to comment
Share on other sites

Ако искаш някой да ти помогне трябва да кажеш:

- версия на MySQL

- SQL със структурата на таблицата

- SQL на заявката

Най-вероятно проблема е защото utf8 кодира латиницата с 1 бит, а Кирилицата с 2 бита и не се предават правилно заявките. БИ трябвало с малко повече тестване и настройка проблема да се реши, но не може да стане без да дадеш поне малко SQL :)

Link to comment
Share on other sites

Ще добавя че има максимални размери на редовете и на индексите (ако колоната ти е индексирана). utf-8 е кодировка с променлива дължина : т.е. ако записваш латиница ще използва по 1 байт за символ, докато за кирилица са 2-3. А ограничението на реда е в байтове. Т.е. ако имаш много такива полета ще изпълниш максималния размер на реда.

За разлика от нея windows-1251 е кодировка с фиксирана дължина : 1 байт. Така че можеш да помислиш и за нея.

За да видиш грешката пробвай да вкараш сървъра в sql_mode STRICT_ALL_TABLES,TRADITIONAL и виж дали има грешки

Link to comment
Share on other sites

Благодаря на всички, въпросите и отговорите ви ме насочиха към търсенето на сълюшъна.

Отстраних проблема, оказа се моя грешка - задал съм например varchar (40) и на кирилица това не са 40 символа,а по-малко. След като увеличих стоностите, проблеми нямам.

 

 

Благодаря още веднъж за бързата реакция на всички. :D

Link to comment
Share on other sites

Благодаря на всички, въпросите ви ме насочиха към търсенето на сълюшъна.

Отстраних проблема, оказа се моя грешка - задал съм например varchar (40) и на кирилица това не са 40 символа,а по-малко. След като увеличих стоностите, проблеми нямам.

 

Благодаря още веднъж за бързата реакция на всички. :D

Не беше ли казал , че си задал varchar(150) и имаш проблем с 35 символа?!

Иначе не знам какви му ги говорите на човека, но щом има VARCHAR(150) с колация utf8_*_*, дори на кирилица тая колона ще събере 150 символа, с максимален storage size от 451 байта. Който не вярва, да погледне мануала какво казва по въпроса.

Освен ако не ползва колоната в key, където има други ограничения, които и в случая не важат.

Поне в mysql > 5.0.3, аз от 3.23 минах направо на 5 под Windows и това си работи според очакванията.

В v.4 не знам, може и да я има тая простотия, под 5 досега не съм се натъквал на подобни глупости, а може и Линукс да има вина в случая :bgrin: .

А щом си задал varchar(40), сигурно ти се е сторило, че имаш лимит от 35 символа, верноято са били точно 40 :D

Link to comment
Share on other sites

Който не вярва, да погледне мануала какво казва по въпроса.

Да и аз знам, че е така в по-новите версии. Но както беше описан проблема без да е казана версията ми се стори, че е нещо подобно.

Link to comment
Share on other sites

Не видях един пост който да обяснява проблема на който е попаднал човека :) Всъщност.. кирилицата при utf8 може да се представи и със 4 символа за всеки един символ. От тук идва 35 х 4 = 150.

 

Предполагам че проблема идва от факта че данните които се вкарват в базата данни не са utf8, а cp1251..Мисля че със "set names win-1251" всичко ще е наред, другия вариант е самата страница да се пусне със utf8 encoding.

Link to comment
Share on other sites

Моля ви, не се заяждайте един с друг. Сравнително отскоро се занимавам с php, mysql и много неща не са ми ясни все още.

Има го и този фактор, че във фирмата която работя приоритет имат колегите,а не работата по фирмения сайт.

И неможе да се концентрираш достатъчно върху проблемите по сайта, допускат се грешки и пропуски, защото на еди кой си му е изкочило съобщение за грешка, друг неможел да принтира, трети неможел да влезе в сайта на "НОЙ" и т.н.

Както казах по-горе недоглеждане от моя страна е проблема, след вашата намеса си прегледах основно нещата и отстраних проблема.

Link to comment
Share on other sites

Не видях един пост който да обяснява проблема на който е попаднал човека :) Всъщност.. кирилицата при utf8 може да се представи и със 4 символа за всеки един символ. От тук идва 35 х 4 = 150.

Цитат от jdru:

"оказа се моя грешка - задал съм например varchar (40) и на кирилица това не са 40 символа,а по-малко."

Т.е. оказва се че е задал даже не 150, а 40. ;)

Макар че и не видях да е казал нещо с точност, а все "около", "например", наистина за да няма обърквания, трябваше да се уточни версия, символи, колони, с точни стойности.

А кои са тия символи, които може да е използвал човека, че всеки да е с 4 'символа'(по-редно беше да кажеш 'байта' though), ако не е тайна? :)

Аз предполагам че е оитвал да вкара обикновен текст на кирилица, и не виждам откъде ще дойдат 4 байта (за справка отново мануала за v.5 -> всеки utf-8 символ заема макс. 3 байта) за да говорим че се е натъкнал точно на този проблем ;)

 

@jdru, не се заяждаме, просто уточняваме :)

И беше добре да уточниш все пак коя версия си ползвал, и точни числа за varchar(XX), и какъв текст си вкарвал и т.н., може а е полезно за друг, който попадне на такъв проблем, затова е форума.

Link to comment
Share on other sites

mySQL 5.0.26

 

CREATE TABLE table

(

id int(6) NOT NULL auto_increment,

row1 varchar(35) NOT NULL,

..........................................

PRIMARY KEY (id),

UNIQUE id (id)

)

 

row1 на латиница си излиза 35 символа/текст/, но на кирилица са 22.

Таблицата има и други полета и резултата е същият - при кирилица броя на символите е по-малък от този на латиница.

 

ПС просто си увеличих мястото в полетата и нещата се оправиха.

Link to comment
Share on other sites

  • 5 months later...

Хмм дори и при MySQL 5 ли го има същото действие като при PHP ?

Надявах се че поне те са направили като се зададе varchar(35) това 35 да бъдат брой символи не байтове...

Link to comment
Share on other sites

Хмм дори и при MySQL 5 ли го има същото действие като при PHP ?

Надявах се че поне те са направили като се зададе varchar(35) това 35 да бъдат брой символи не байтове...

Символи са (както трябва), а не байтове. :)

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...