|
Ошибка: #1366 - Incorrect string value
|
|||
---|---|---|---|
#18+
Здравствуйте. Проблема такая - в базу пишутся данные которые приходят от пользователей. Стали появляться ошибки #1366 - Incorrect string value. Все решения которые я нагуглил сводятся к преобразованию кодировки базы/таблицы/поля в utf8mb4. Для меня этот вариант неприемлим. Есть ли другие решения этой ошибки? Может быть какая-то настройка отключает это и в базу запишутся урезанные символы, пусть они будут вопросами - это устраивает. Или может в пыхе есть волшебная функция которая вырежет эти эмоджи или конвертнет во что-нибудь ? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2021, 11:31 |
|
Ошибка: #1366 - Incorrect string value
|
|||
---|---|---|---|
#18+
Не видя полной структуры таблицы, настроек (charset/collation) и значения, которое приводит к ошибке, сказать ничего нельзя. Ну и код, который пишет в БД, тоже нужен - может, в значении есть символы, требующие экранирования. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2021, 12:41 |
|
Ошибка: #1366 - Incorrect string value
|
|||
---|---|---|---|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
Код: php 1. 2. 3. 4. 5. 6. 7.
Но это, право, лишнее... Речь идет о том, что мускуль выдает ошибку, когда в сообщении приходит какой-нибудь эмоджи, который 4-х байтный. Мне этот эмоджи на хрен не нужен, поэтому и не хочу конвертировать таблицу в другую кодировку. Можно его выпилить или преобразовать во что-нибудь... по фиг. Главное - чтоб не валилась ошибка и была какая-то запись в базу. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2021, 13:18 |
|
Ошибка: #1366 - Incorrect string value
|
|||
---|---|---|---|
#18+
mysql_query - это ж древняя как дерьмо мамонта библиотека. Переходите на PDO и подготовленные запросы. И MySQL давно пора обновить, а базу перегнать на использование UTF8MB4. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2021, 15:55 |
|
Ошибка: #1366 - Incorrect string value
|
|||
---|---|---|---|
#18+
petr12345, Сделайте отладочный вывод переменной $sql в случае возникновения ошибки. В полном запросе будет видно где ошибка. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2021, 21:35 |
|
Ошибка: #1366 - Incorrect string value
|
|||
---|---|---|---|
#18+
Как вариант, использовать BLOB. Если конечно оно возможно. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2021, 23:14 |
|
Ошибка: #1366 - Incorrect string value
|
|||
---|---|---|---|
#18+
vkle использовать BLOB. Если конечно оно возможно. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2021, 07:23 |
|
Ошибка: #1366 - Incorrect string value
|
|||
---|---|---|---|
#18+
Akina, mysql_query тут совершенно ни при чем. mysqli дает ровно такую же ошибку. я же объясняю еще раз, услышьте меня, проблема в том что добавляются 4-х байтные символы (эмоджи) в базу, у которой кодировка utf8 (3-х байтная) Таблица очень большая, а эти 4-х байтные емоджи мне не нужны по условиям задачи абсолютно, поэтому ради них перекодировать базу я не буду. Поэтому мне нужно как-то их или вырезать или подавить эти ошибки в мускуле. Что-то мне подсказывает что такая настройка есть, но я не могу ее найти. Когда я вставляю эмоджи на локале в точно такую же таблицу, то все вставляется и эти эмоджи заменяются знаками вопроса. Но на проде так не происходит - выдает ошибку "#1366 - Incorrect string value: '\xF0\x9F\x98\x80' for column `msg` at row 1" ps: я, практически, уверен, что эту ошибку любой может воcпроизвести в том же phpMyAdmin. Не обязательно писать код. Добавьте в таблицу у которой кодировка utf8, символ эмоджи в любое текстовое поле. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2021, 09:53 |
|
Ошибка: #1366 - Incorrect string value
|
|||
---|---|---|---|
#18+
petr12345, https://dba.stackexchange.com/questions/20690/how-can-i-insert-smiley-faces-into-mysql https://stackoverflow.com/questions/20411440/incorrect-string-value-xf0-x9f-x8e-xb6-xf0-x9f-mysql https://stackoverflow.com/questions/10957238/incorrect-string-value-when-trying-to-insert-utf-8-into-mysql-via-jdbc ... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2021, 10:01 |
|
Ошибка: #1366 - Incorrect string value
|
|||
---|---|---|---|
#18+
Если MySQL-сервер не поддерживает UTF8MB4, то ни хрена Вы никакими настройками ничего не сделаете. Для справки - MySQL проверяет типы данных на каждом шаге перед выполнением каждой операции. И конкретно эта ошибка выявляется ещё до начала выполнения запроса. Возможно, на этапе построения плана в момент обработки константных значений, возможно, в момент проверки типов перед точкой выполнения первого BEFORE триггера. Единственный видимый выход из ситуации без обновления сервера - это передача строки с четырёхбайтовыми символами в виде бинарной строки. И в таком виде её можно либо класть в VARBINARY поле, либо обрабатывать в HEX и выстригать четырёхбайтовые символы (усраться проблема, на самом деле). Так что Вы подумайте насчёт того, чтобы чистить ввод на стороне PHP, ещё до передачи на MySQL. Там это будет сделать немого проще - одна регулярка... ... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2021, 10:03 |
|
Ошибка: #1366 - Incorrect string value
|
|||
---|---|---|---|
#18+
peter64, Эти все советы предполагают изменение кодировки таблицы. Я же в каждом своем посте повторяю - этот вариант мне не годится ... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2021, 11:50 |
|
Ошибка: #1366 - Incorrect string value
|
|||
---|---|---|---|
#18+
petr12345 Эти все советы предполагают изменение кодировки таблицы. И это тоже? Akina Единственный видимый выход из ситуации без обновления сервера - это передача строки с четырёхбайтовыми символами в виде бинарной строки. И в таком виде её можно либо класть в VARBINARY поле, либо обрабатывать в HEX и выстригать четырёхбайтовые символы Akina чистить ввод на стороне PHP, ещё до передачи на MySQL ... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2021, 11:53 |
|
Ошибка: #1366 - Incorrect string value
|
|||
---|---|---|---|
#18+
Akina, На локале тем не менее получается вставить строку с эмоджи в таблицу с такой же кодировкой, там эти эмоджи просто заменяются на знаки вопросов. Значит это какая то настройка делает (которая скорее всего по дефолту есть в старых версиях (у меня на локале) и нет или выключена или наоборот включена... хз.. по дефолту в новых версиях (как на проде)). Это был бы идеальный вариант для меня. Версия с пыхом как вариант тоже прокатит, подскажите как можно их вырезать? Но этот вариант придется во многих местах добавлять. С настройкой мускуля было бы лучше. Как другой пример - в лог 404 ошибок в поле HTTP_REFERRER тоже прилетают эмоджи, и весь лог этой 404 ошибки тоже валится с "#1366 - Incorrect string value " ... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2021, 11:58 |
|
Ошибка: #1366 - Incorrect string value
|
|||
---|---|---|---|
#18+
petr12345 Таблица очень большая, а эти 4-х байтные емоджи мне не нужны по условиям задачи абсолютно, поэтому ради них перекодировать базу я не буду. Сколько террабайт эта таблица? И в чём проблема с её перекодировкой (которая не требуется, достаточно сменить метаданные)? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2021, 13:39 |
|
Ошибка: #1366 - Incorrect string value
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, Вы уверены, что только метаданные поменяются и вся таблица не заблочится на N часов? Что-то мне подсказывает, что это очень трудоемкая операция ... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2021, 22:16 |
|
Ошибка: #1366 - Incorrect string value
|
|||
---|---|---|---|
#18+
Я не уверен за MySQL, но таки да, смена чарсета на совместимый обычно не требует трогать данные вообще. А для "несколько часов" требуется террабайтный размер таблицы даже на моём старом ноутбуке. У вас сервером работает кофемолка?.. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2021, 14:12 |
|
Ошибка: #1366 - Incorrect string value
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, Даже поверхностное изучение вопроса, говорит о том, что дело не ограничится изменением только метаданных. Потребуется полное перекодирование всего столбца как минимум. Сервера у нас отличные, ттх привести сейчас не могу, но руководство никогда не скупилось на это дело. По опыту могу сказать, что даже обычное удаление пары-тройки миллионов записей наглухо блочит всю таблицу, поэтому перекодирование таблицы с десятками миллионов записей гарантированно отправит ее в блок. И снова повторюсь - игра не стоит свеч. Если б это было кране необходимо, можно было бы и это сделать. Но это на хрен не нужно!!! Насрать на потерянные эмоджи. Нужно просто убрать ошибку. На данный момент, в качестве решения рассматривается вырезание этих эмождей в пыхе, но мне он не нравится, т.к. нужно перелопатить весь проект чтоб добавить этот код везде, а таких мест получается немало. Все еще надеюсь на помощь гуру, которые скажут какую настройку надо включить или выключить в мускуле. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2021, 15:10 |
|
Ошибка: #1366 - Incorrect string value
|
|||
---|---|---|---|
#18+
petr12345 Потребуется полное перекодирование всего столбца как минимум. Из Utf-8 в Utf-8? Это не займёт много времени. Считайте 2 гигабайта в секунду. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2021, 17:04 |
|
Ошибка: #1366 - Incorrect string value
|
|||
---|---|---|---|
#18+
Как я и предполагал операция перекодировки совсем не легкая. На 500 000 записей, такой запрос занял около 5 сек. Код: sql 1.
Таблица messages на проде с несколькими десятками миллионов записей гарантированно уйдет в блок на несколько минут. Даже и пробовать не буду. Это неприемлимо в моем случае. На данный момент решил проблему в пыхе вырезанием этих эмоджей. Но это не совсем то, что я хочу, т.к. есть и другие потенциальные места где такое возможно и не хочется везде добавлять этот код. Поэтому, все еще очень жду от знающих людей совета про настройку мускуля, которая игнорит эти ошибки. Она должна быть. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2021, 08:29 |
|
|
start [/forum/search_topic.php?author=qwertydodo&author_mode=last_topics&do_search=1]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
184ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
others: | 442ms |
total: | 748ms |
0 / 0 |