MySQL belgeleri 5.0'dan beri varchar uzunluklarının bayt değil karakter birimine başvurduğunu söylüyor. Ancak, kısa bir süre önce, belirttiğim varchar sütununa sığması gereken değerleri eklerken, kesilmiş veri uyarıları aldığım bir soruna rastladım. MySQL UTF8 varchar sütun boyutu
Benmysql> show create table test\G
*************************** 1. row ***************************
Table: test
Create Table: CREATE TABLE `test` (
`string` varchar(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
Sonra UTF8 karakter Farklı miktardaki ile birden fazla 10 karakter değerleri takılı
mysql> insert into test (string) values
-> ('abcdefghij'),
-> ('ãáéíçãáéíç'),
-> ('ãáéíç67890'),
-> ('éíç4567890'),
-> ('íç34567890');
Query OK, 5 rows affected, 4 warnings (0.06 sec)
Records: 5 Duplicates: 0 Warnings: 4
mysql> show warnings;
+---------+------+---------------------------------------------+
| Level | Code | Message |
+---------+------+---------------------------------------------+
| Warning | 1265 | Data truncated for column 'string' at row 2 |
| Warning | 1265 | Data truncated for column 'string' at row 3 |
| Warning | 1265 | Data truncated for column 'string' at row 4 |
| Warning | 1265 | Data truncated for column 'string' at row 5 |
+---------+------+---------------------------------------------+
mysql> select * from test;
+------------+
| string |
+------------+
| abcdefghij |
| ãáéíç |
| ãáéíç |
| éíç4567 |
| íç345678 |
+------------+
5 rows in set (0.00 sec)
Bu gösteriyor ki düşünüyorum v5.1 basit bir tabloyla bu sorunu çoğaltılmış varchar boyutu hala bayt cinsinden tanımlanır veya en azından karakter birimlerinde doğru değildir.
Sorun şu ki, belgeleri doğru anlıyor muyum ve bu bir hatadır? Yoksa belgeleri yanlış yorumlu muyum?
En ufak bir sorun değil ama 5.5.20 olduğunu iddia eden [sqlfiddle] 'da (http://sqlfiddle.com/#!2/829b8/2) size bu sorun yaşanmaz. Belki de o zamandan beri düzeltilmiş bir hataydı (aradım ama bir hata raporu bulamadım). – eggyal
Aynı sorun 5.5.19'da bulunmaktadır, bu nedenle düzeltilen sürüm olabilir. Sürüm notlarının bir kontrolü, varchars veya UTF8 – sreimer