Команда 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 байта). Там, вероятно, новая строка в конце, а также.

Другие вопросы по тегам