mysql возвращает сочетание сопоставлений при попытке использовать регистр при выборе двух разных материалов - PullRequest
0 голосов
/ 18 июня 2020

У меня есть два разных содержимого в view db , где этот view db генерируется из table db .

здесь два столбца из таблицы

(CASE WHEN view.dcs = 8 then view.uc2content else view.utf8content END) as 'dcsContent'

uc2content и utf8content, безусловно, два разных символа кодировки, которые я создаю для представления, использующего этот запрос

CONVERT(a.textcolA USING utf8) as utf8content,
CONVERT(a.textcolb USING ucs2) as uc2content,

Есть идеи, как избавиться от этого mix-of-collations?

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 21 июня 2020

Столбец результата должен иметь 1 набор символов для всех случаев. Если в ваших исходных столбцах используются разные наборы символов, преобразуйте их в один (желательно utf8bm4 или utf8 для более старых mysql версий).

(CASE WHEN view.dcs = 8 
  THEN CONVERT(view.uc2content USING utf8bm4)
  ELSE CONVERT(view.utf8content USING utf8mb4)
END) AS 'dcsContent'

Однако я думаю, что лучше не преобразовывать источники в разные наборы символов в первую очередь. Просто сохраните все в utf8bm4 или utf8 в первую очередь и не конвертируйте ничего в select или view.

0 голосов
/ 22 июня 2020

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

Однако - что вы можете сделать, так это вернуть значения как BINARY:

(CASE WHEN view.dcs = 8
    then BINARY view.uc2content
    else BINARY view.utf8content
END) as 'dcsContent'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...