MySQL не будет хранить не английские символы - PullRequest
1 голос
/ 19 марта 2012

Хорошо, я задал этот вопрос, но решения не решили эту проблему.

По сути, в моей базе данных хранятся ТОЛЬКО английские символы, даже если для ее полей задан режим Unicode ci UTF-8.

Я пытался хранить русские буквы, он выводит странные символы.

Потом я посмотрел на PhpMyAdmin, эти странные символы выглядели так:

гк

ОДНАКО, когда я что-то храню прямо из PhpMyAdmin, русские буквы выглядят нормально.Тем не менее, моя страница распечатывает ?????- вопросительные знаки.

Что происходит ???Как хранить и отображать разные языки?

Ответы [ 2 ]

1 голос
/ 19 декабря 2017

Это тоже была моя проблема, и я наконец нашел способ ее решить.Я не опытный программист, но я пишу здесь ответ, чтобы он мог быть полезен тем, кто, как и я, не смог решить свою проблему, используя другие способы, которые они пытались.

По моему мнениюв общем, вы всегда должны сначала убедиться, что вы сделали эти три вещи:

1- Добавьте этот тег к каждому из ваших источников HTML, который использует какой-то текст с языком, отличным от другого.чем английский (добавьте его между открывающим и закрывающим тегами head ):

<meta charset="utf8"/>

(как вы видите, это тег без закрывающей пары)

2- Сразу после того, как вы подключаетесь к своей базе данных (например, с помощью объекта mysqli с именем $ conn), тоже выполните этот запрос:

$conn->query("SET NAMES 'utf8'");

(По крайней мере, это работало для моего собственного языка, которыйФарси)

3- Установите сопоставление создаваемых вами таблиц как "utf8-general-ci" с нуля (... и я подчеркиваю на этом " с нуля". Если вы хотите узнать причину, прочитайте остаток моего ответа ниже!):

Конечно,Будут важны эти три вещи, которые я сказал выше, но ни одна из них не помогла мне, когда я боролся с этой неловкой катастрофой!:( Так что я разочаровался, но потом, как всегда, появилась эта SO-страница! :) Я прочитал замечательную статью, предложенную @deceze, которая есть в комментариях под постом, и увидел в ней следующие строки:

Сервер базы данных имеет набор символов по умолчанию, база данных может иметь набор символов по умолчанию, таблица базы данных может иметь набор символов по умолчанию и, наконец, столбец имеет настройку набора символов.Правило простое: если для столбца не указан явный набор символов, для него используется следующий более высокий стандарт.Значения по умолчанию для сервера, базы данных и таблицы не имеют никакого влияния, если столбец имеет явный набор символов.

На самом деле, моя глупая проблема заключалась в том, что я создал таблицу ранее (с юникодом, отличным отutf8) и , затем при попытке изменить его юникод на utf8, похоже, это не сработало, потому что, как говорится в статье, даже сортировка таблицы отделена от сортировки каждого из ееполя, поэтому, когда вы меняете одно, другие, как правило, сохраняют свои параметры сортировки по умолчанию (тот, который вы выбрали, когда создавали таблицу с нуля !) Наконец, я перешел на вкладку структуры в phpmyadmin и изменил параметры сортировкииз тех полей, которые все еще использовали latin1 к utf8-general-ci тоже.(ci здесь означает без учета регистра)

Надеюсь, это поможет.

1 голос
/ 19 марта 2012

Во-первых, убедитесь, что вы работаете с одной и той же кодировкой во всем процессе, под этим я подразумеваю форму, процесс и дБ.

Я бы порекомендовал работать с charset = utf-8 в метатеге в заголовке вашего HTML.

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

Наконец, не забудьте установить текстовые поля на:

utf8_unicode_ci

Я надеюсь, что это работает для вас. Дайте мне знать, если вам нужно больше информации.

...