Команда mysql substring/left не возвращает правильное количество символов
Я выполняю следующее заявление:
select left(column,400) from table into outfile test;
Я также пытался использовать функцию подстроки (с теми же результатами).
Когда я иду, чтобы загрузить файл и получить количество символов:
wc -c < test
Я получаю 409 символов в качестве возврата.
Приходите, кто-нибудь поможет мне, почему я получаю неправильный счет?
Таблица базы данных имеет значение utf8, а столбец - длинный текст.
Когда я запускаю следующее, оно все равно не дает правильную длину символов:
select length(left(column, 400) from table where id in (1,2,3,4);
+-----------------------------+
| length(left(column,400)) |
+-----------------------------+
| 402 |
| 403 |
| 412 |
| 401 |
+-----------------------------+
1 ответ
Команда wc -c
считает байты, несмотря на символ, используемый для переключения. С БД в UTF-8, MySQL left
считает символы. Поскольку UTF-8 может использовать более 1 байта на символ, я ожидаю, что первые 400 символов в column
включает в себя 8 символов, которые занимают 2 байта (или меньше 8, если некоторые занимают 3 байта). Там, вероятно, новая строка в конце, а также.