SQLite дает правильную длину вместо длины JavaScript? - PullRequest
0 голосов
/ 21 марта 2019

Я вставил смайлик в текстовое поле, и его длина равна 1 вместо 2, как сказал наш всемогущий javascript.

Размер смайлика:

select length(\'?\');
'length(\'?\')': 1

Как получить SQLite длядать -cправильный- результат в -UTF8- javascript, то есть 2?

1 Ответ

1 голос
/ 21 марта 2019

Символ смайлика состоит из двух кодовых точек UTF-16 (\ud83c\udf49) или четырех байтов UTF-8 (F0 9F 8D 89).

Функция Javascript length возвращает номер UTF-16кодовые точки для строки:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/length

Функция SQLite length возвращает количество символов в строке:

https://www.sqlite.org/lang_corefunc.html#length

Другими словами: это две разные функции.

Если вы используете длину строки в байтах, вы можете использовать:

select length(cast('?' as BLOB))

Вывод:

4

Вероятно, лучше сделать шаг назад и посмотреть, чего вы на самом деле хотите достичь;может быть, есть другой подход.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...