|
|
|
| Сервер MySQL выдает ошибку:
Data too long for column 'NAME' at row 1
Кто знает в связи с чем это возникает? И как бороться. Поле Name VARCHAR(255) NOT NULL /
Думаю, что причина связана с кодировками....
Но что конкретно? Кто знает?
Если нужно, необходимую информацию предоставлю | |
|
|
|
|
|
|
|
для: Zmej
(03.07.2008 в 17:25)
| | > VARCHAR(255)
Длина данных должна быть не более 255 символов в соответствии с кодировкой поля. | |
|
|
|
|
|
|
|
для: Эй
(03.07.2008 в 17:30)
| | >> VARCHAR(255)
>Длина данных должна быть не более 255 символов в соответствии с кодировкой поля.
Только не 255 символов, а 255 байт. Что в случае применения utf8, например, не одно и то же. | |
|
|
|
|
|
|
|
для: Trianon
(03.07.2008 в 17:35)
| | - | |
|
|
|
|
|
|
|
для: Trianon
(03.07.2008 в 17:35)
| | вот-вот: у меня по-моему, в этом и проблема: таблицы в cp1251
делаю даже это:
@mysql_query("set character_set_client='сз1251'");
@mysql_query("set character_set_results='сз1251'");
@mysql_query("set collation_connection='сз1251_general_ci'");
Но эта ошибка возникает у меня, когда скрипт начинает читать строки из .CSV файла.
С этим может быть связана проблема? | |
|
|
|
|
|
|
|
для: Zmej
(03.07.2008 в 17:42)
| | 1. что это за сз1251?
2. Удобный подход. Поставить собаку перед вызовом, а потом думать, почему же ничего непонятно... | |
|
|
|
|
|
|
|
для: Trianon
(03.07.2008 в 18:08)
| | 1. это описка, конечно, надо cp1251...
2. без собак эти запросы корректно работают | |
|
|
|
|
|
|
|
для: Zmej
(03.07.2008 в 18:17)
| | От Вас требуется два оператора.
CREATE TABLE с одним полем VARCHAR(255).
и INSERT , который дает такой эффект.
Лучше в прикрепленном архиве. | |
|
|
|
|
|
|
|
для: Zmej
(03.07.2008 в 17:42)
| | Так проверь длину строки перед вводом в таблицу | |
|
|
|
|
|
|
|
для: Trianon
(03.07.2008 в 17:35)
| | Тест показал, что лимит именно 255 символов в соответствии с кодировкой.
Дамп:
--
-- Структура таблицы `test3`
--
CREATE TABLE IF NOT EXISTS `test3` (
`str` varchar(10) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
Код:
<?php
mysql_query('SET NAMES "utf8"');
mysql_query('TRUNCATE TABLE `test3`');
$string = base64_decode('0LDQsdCy0LPQtNC10ZHQttC30Lg='); // строка "абвгдеёжзи" в UTF-8
var_dump($string, mb_strlen($string, 'UTF-8')); // 20 байт, 10 символов
mysql_query('INSERT INTO `test3` SET `str`="'.mysql_real_escape_string($string).'"');
$q = mysql_query('SELECT * FROM `test3` LIMIT 1');
var_dump(mysql_fetch_assoc($q)); // извлечена строка размером 20 байт
?>
|
| |
|
|
|
|
|
|
|
для: sms-send
(03.07.2008 в 19:12)
| | Нет.
И дело тут именно в том, что поле VARCHAR(10) а не VARCHAR(255) .
Сделайте тот же эксперимент для поля VARCHAR(200) и значения в 300 байт - 150 символов - увидите.
Под байтовую длину значения отводится один и только один допонительный байт.
Число, превышающее 255, туда просто не поместить. | |
|
|
|
|
|
|
|
для: Trianon
(03.07.2008 в 19:50)
| | Тест прошёл без изменений. Если честно сам удивился, когда в документации видел, что:
Так же как и для столбцов CHAR, можно задать столбец VARCHAR любой длины между 1 и 255.
|
Но можно определить столбец VARCHAR длиной вплоть до 21845.
Версия MySQL 5.0.18, таблица MyISAM. | |
|
|
|
|
|
|
|
для: sms-send
(03.07.2008 в 20:01)
| | ага... значит с некоей версии поставили таки два байта на префикс длины....
Values in VARCHAR columns are variable-length strings. The length can be specified as a value from 0 to 65,535. The effective maximum length of a VARCHAR is subject to the maximum row size (65,535 bytes, which is shared among all columns) and the character set used. | |
|
|
|
|
|
|
|
для: Trianon
(03.07.2008 в 20:07)
| | Более точно
Values in VARCHAR columns are variable-length strings. The length can be specified as a value from 0 to 255 before MySQL 5.0.3, and 0 to 65,535 in 5.0.3 and later versions. The effective maximum length of a VARCHAR in MySQL 5.0.3 and later is subject to the maximum row size (65,535 bytes, which is shared among all columns) and the character set used.
Соответственно в 4.1.* можно напороться на то, что заявлял автор темы. | |
|
|
|