Могут ли особые символы французского и испанского языков храниться в вархаре? - PullRequest
9 голосов
/ 25 августа 2011

Французский и испанский имеют специальные символы, которые не используются в обычном английском (с ударными гласными и т. Д.).

Поддерживаются ли эти символы в varchar? Или мне нужен nvarchar для них?

(ПРИМЕЧАНИЕ: я НЕ хочу обсудить, следует ли мне использовать nvarchar или varchar.)

Ответы [ 5 ]

12 голосов
/ 25 августа 2011

О какой реализации SQL вы говорите?

Я могу говорить о Microsoft Sql Server;другие реализации SQL, не так уж и много.

Для Microsoft SQL Server по умолчанию используется сортировка SQL_Latin1_General_CP1_CI_AS (лат. 1 Общая, с учетом регистра, без учета регистра, с ударением).Он допускает двустороннее представление большинства западноевропейских языков в однобайтовой (varchar) форме, а не в двухбайтовой (nvarchar).

Он построен на "Windows 1252"кодовая страницаЭта кодовая страница фактически соответствует стандарту ISO-8859-1 с диапазоном кодовых точек 0x80–0x9F, представленным альтернативным набором глифов, включая символ евро в 0x80.ISO-8859-1 определяет этот диапазон кодовых точек в качестве управляющих символов, которые не имеют графического представления.

ISO-8859-1 состоит из первых 256 символов Unicodes Basic Multilinigual Plane , охватывающихвесь домен 8-битного символа (0x00–0xFF).Для получения подробной информации и сравнения см.

Западноевропейские языки, которым будет трудно с этим сопоставлениемпоследовательность включает (но не обязательно ограничивается) латышский, литовский, поличский, чешский и словацкий.Если вам нужно их поддерживать, вам нужно либо использовать другой порядок сортировки (SQL Server предлагает множество параметров сортировки), либо перейти на использование nvarchar.

Следует отметить, что смешивание параметров сортировки в базе данных приводит квызвать проблемы.Отклонение от параметров сортировки по умолчанию следует выполнять только в случае необходимости и с пониманием того, как с ним можно стрелять себе в ногу.

Я подозреваю, что Oracle и DB2 предоставляют аналогичную поддержку.Я не знаю о MySQL или других реализациях.

5 голосов
/ 25 августа 2011

Вы должны использовать nvarchar.

http://theniceweb.com/archives/156

Большинство персонажей подойдут в varchar, но некоторые - нет, зачем рисковать.

ПохожиеВопрос

Когда мы должны использовать NVARCHAR / NCHAR вместо VARCHAR / CHAR в SQL Server?

4 голосов
/ 25 августа 2011

Символы, которые могут храниться в поле varchar, полностью зависят от того, какая кодовая страница определена для этого конкретного поля.Если есть определенные символы, которые вы хотите сохранить, вы можете выбрать кодовую страницу, которая будет хранить эти символы, и она должна работать.Плохо.

Мой совет - всегда использовать nvarchar для хранения строк в базе данных SQL.На самом деле, я считаю, что кодирование не-Unicode символов является ошибкой, будь то в базе данных или где-либо еще.

Ваша операционная система использует Unicode для внутреннего использования (будь то Windows, Mac, Linux или что-то еще).JVM и .NET Framework используют Unicode для внутреннего использования.Просто нет смысла делать преобразования кодовых страниц каждый раз, когда вы запрашиваете базу данных.Нет смысла делать преобразования кодовых страниц каждый раз, когда вы пишете в базу данных.Просто используйте столбец nvarchar, и ваши строки будут идти прямо из вашего приложения в базу данных без изменений - без поиска преобразования символов, без обработчиков ошибок кодирования, без странных символов или неожиданных вопросительных знаков.

При использовании nvarchar для всехваших строковых данных в ваших базах данных - и Unicode в целом везде - вы можете перестать беспокоиться о кодировках и сосредоточиться на основных функциях вашего приложения, сейчас и навсегда.

Сегодня настал день, чтобы отказаться от устаревших кодировок символов,

Сделайте это для сопровождающих, которые идут за вами.Сделай это для своих детей.Сделай это для себя.

2 голосов
/ 20 января 2015

Некоторая отличная информация, особенно от Николаса Кэри, но никто прямо не ответил «да» или «нет» на ваш вопрос ...

Да, вы можете использовать varchar для обработки сочетания французского и испанского языков, при условии ваш набор символов - Windows-1252 (или аналогичный современный расширенный набор ISO-8859-1 с несколькими дополнительными символами, такими как символ евро).В SQL Server набор символов выбирается путем установки параметров сортировки (для всего сервера, для базы данных или для столбца): Windows-1252 используется параметрами сортировки * Latin1 *.В MySQL Windows-1252 называется Latin1.

Обратите внимание, что если вы попытаетесь сохранить символ вне репертуара выбранного набора символов, система может выдать ошибку или молча перевести символ в похожий.из своего репертуара.Например, SQL Server преобразует польский Ł в простой L, но выдает ошибку для японского символа.

2 голосов
/ 25 августа 2011

Я не уверен, но одно из этих сопоставлений может подходить как для испанского, так и для французского языков, но это должно быть исследовано.

http://dev.mysql.com/doc/refman/5.5/en/charset-charsets.html

...