我有口一些DBS成獨立的MySQL版本:5.0.18上Windows7的64位運行,我有一個問題,我堅持。如果我嘗試插入任何國家/ Unicode字符到varchar
我得到錯誤:數據太長,列誤差與民族特色
ERROR 1406 (22001): Data too long for column 'nam' at row 1
這裏MCVE SQL腳本:
SET NAMES utf8;
DROP TABLE IF EXISTS `tab`;
CREATE TABLE `tab` (`ix` INT default 0,`nam` VARCHAR(1024) default '') DEFAULT CHARSET=utf8;
INSERT INTO `tab` VALUES (1,'motorček');
INSERT INTO `tab` VALUES (2,'motorcek');
SELECT * FROM `tab`;
這裏輸出:
mysql> SET NAMES utf8;
Query OK, 0 rows affected (0.00 sec)
mysql> DROP TABLE IF EXISTS `tab`;
Query OK, 0 rows affected (0.00 sec)
mysql> CREATE TABLE `tab` (`ix` INT default 0,`nam` VARCHAR(1024) default '') DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO `tab` VALUES (1,'motorček');
ERROR 1406 (22001): Data too long for column 'nam' at row 1
mysql> INSERT INTO `tab` VALUES (2,'motorcek');
Query OK, 1 row affected (0.00 sec)
mysql> SELECT * FROM `tab`;
+------+----------+
| ix | nam |
+------+----------+
| 2 | motorcek |
+------+----------+
1 row in set (0.00 sec)
正如你所看到的國家字符č
E8h
缺失。
我知道這些的問題答案的:
- How to make MySQL handle UTF-8 properly
- 「Data too long for column」 - why?
- Error Code: 1406. Data too long for column - MySQL
但他們沒有任何對那些工作解決這個問題(無解這個)。
即使對於單個字符串,也存在此問題。無論大小爲VARCHAR
。因此,現在唯一的解決方案是將國家字符更改爲ASCII但這會丟失我寧願避免的信息。
我試着用各種字符集utf8, ucs2, latin1
沒有任何影響。
我試着放下STRICT_TRANS_TABLES
作爲其他答案的一些建議,但對此也沒有影響(並且字符串的大小比需要的大很多倍)。
有沒有人有任何線索?可能它是與事實,這的MySQL服務器是獨立的(沒有安裝),它開始使用此CMD:
@echo off
bin\mysqld --defaults-file=bin\my.ini --standalone --console --wait_timeout=2147483 --interactive_timeout=2147483
if errorlevel 1 goto error
goto finish
:error
echo.
echo MySQL could not be started
pause
:finish
和查詢內部控制檯完成啓動這樣CMD:
@echo off
bin\mysql.exe -uroot -h127.0.0.1 -P3306
rem bin\mysql.exe -uroot -proot -h127.0.0.1 -P3306
你應該升級! 5.0.18將近12歲。 5.1,5.5,5.6,5.7和8.0已對非ASCII字符的處理進行了更改。我從你的自答中看出你這次躲過子彈。 –