Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Data too long for column 'NAME' at row 1
 
 автор: Zmej   (03.07.2008 в 17:25)   письмо автору
 
 

Сервер MySQL выдает ошибку:

Data too long for column 'NAME' at row 1

Кто знает в связи с чем это возникает? И как бороться. Поле Name VARCHAR(255) NOT NULL /
Думаю, что причина связана с кодировками....
Но что конкретно? Кто знает?

Если нужно, необходимую информацию предоставлю

   
 
 автор: Эй   (03.07.2008 в 17:30)   письмо автору
 
   для: Zmej   (03.07.2008 в 17:25)
 

> VARCHAR(255)

Длина данных должна быть не более 255 символов в соответствии с кодировкой поля.

   
 
 автор: Trianon   (03.07.2008 в 17:35)   письмо автору
 
   для: Эй   (03.07.2008 в 17:30)
 

>> VARCHAR(255)
>Длина данных должна быть не более 255 символов в соответствии с кодировкой поля.

Только не 255 символов, а 255 байт. Что в случае применения utf8, например, не одно и то же.

   
 
 автор: GeorgeIV   (03.07.2008 в 17:36)   письмо автору
 
   для: Trianon   (03.07.2008 в 17:35)
 

-

   
 
 автор: Zmej   (03.07.2008 в 17:42)   письмо автору
 
   для: 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 файла.
С этим может быть связана проблема?

   
 
 автор: Trianon   (03.07.2008 в 18:08)   письмо автору
 
   для: Zmej   (03.07.2008 в 17:42)
 

1. что это за сз1251?

2. Удобный подход. Поставить собаку перед вызовом, а потом думать, почему же ничего непонятно...

   
 
 автор: Zmej   (03.07.2008 в 18:17)   письмо автору
 
   для: Trianon   (03.07.2008 в 18:08)
 

1. это описка, конечно, надо cp1251...
2. без собак эти запросы корректно работают

   
 
 автор: Trianon   (03.07.2008 в 18:27)   письмо автору
 
   для: Zmej   (03.07.2008 в 18:17)
 

От Вас требуется два оператора.
CREATE TABLE с одним полем VARCHAR(255).
и INSERT , который дает такой эффект.

Лучше в прикрепленном архиве.

   
 
 автор: GeorgeIV   (03.07.2008 в 18:22)   письмо автору
 
   для: Zmej   (03.07.2008 в 17:42)
 

Так проверь длину строки перед вводом в таблицу

   
 
 автор: sms-send   (03.07.2008 в 19:12)   письмо автору
 
   для: 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($stringmb_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 байт

?>

   
 
 автор: Trianon   (03.07.2008 в 19:50)   письмо автору
 
   для: sms-send   (03.07.2008 в 19:12)
 

Нет.
И дело тут именно в том, что поле VARCHAR(10) а не VARCHAR(255) .
Сделайте тот же эксперимент для поля VARCHAR(200) и значения в 300 байт - 150 символов - увидите.

Под байтовую длину значения отводится один и только один допонительный байт.
Число, превышающее 255, туда просто не поместить.

   
 
 автор: sms-send   (03.07.2008 в 20:01)   письмо автору
 
   для: Trianon   (03.07.2008 в 19:50)
 

Тест прошёл без изменений. Если честно сам удивился, когда в документации видел, что:

Так же как и для столбцов CHAR, можно задать столбец VARCHAR любой длины между 1 и 255.


Но можно определить столбец VARCHAR длиной вплоть до 21845.

Версия MySQL 5.0.18, таблица MyISAM.

   
 
 автор: Trianon   (03.07.2008 в 20:07)   письмо автору
 
   для: 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:09)   письмо автору
 
   для: 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.* можно напороться на то, что заявлял автор темы.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования