PHP + MySQL + испанский

Моя система имеет дело с испанскими данными. Я использую laravel + mysql. Моя сортировка базы данных — latin1 — сортировка по умолчанию, и моя структура таблиц выглядит примерно так:

CREATE TABLE `product` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(100) CHARACTER SET latin1 NOT NULL,
) ENGINE=InnoDB AUTO_INCREMENT=298 DEFAULT CHARSET=utf8mb4;

Есть несколько вопросов:

  1. Я загружаю данные из файла в БД. Это хорошая практика для
    utf8_encode ($ name) перед вставкой в ​​БД? В настоящее время я делаю это,
    еще ошибка сравнения: SQLSTATE[HY000]: General error: 1267 Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_unicode_ci,COERCIBLE) for operation '='

  2. Если использование utf8_encode — путь, нужно ли мне utf8_encode даже имя, которое я хочу найти? то есть выберите … где имя =
    utf8_encoded (имя)?

  3. Есть ли недостатки или лучший способ справиться с вышесказанным? Как я делаю испанский впервые (персонажи с акцентами).

2

Решение

Ваш product.name столбец имеет набор символов latin1, Ты знаешь что. Это также имеет сопоставление latin1_swedish_ci, Это по умолчанию. Оригинальные разработчики MySQL — шведские. Поскольку вы работаете на испанском языке, вы, вероятно, хотите использовать latin1_spanish_ci для вашего сопоставления; это сортирует Ñ после N, Другие латиноязычные сопоставления сортируют их вместе.

Потому что ваш product.name столбец хранится в латинице 1, это плохой, не хорошо, идея использовать utf8_encode() на текст, прежде чем сохранить его в этом столбце.

Ваш лучший способ действий, особенно если ваше приложение новое, состоит в том, чтобы сделать набор символов для всех столбцов utf8mb4, Это означает изменение определенного набора символов вашего name колонка. Затем вы можете конвертировать текстовые строки в Unicode перед их сохранением.

Вероятно, было бы целесообразно сделать сопоставление по умолчанию для каждой таблицы. utf8mb4_spanish_ci также. Объединения запекаются в индексы для varchar() колонны. (Если вы работаете на традиционном испанском языке, в котором ch это отдельное письмо, используйте utf8mb4_spanish2_ci.)

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector