こんにちは。
例えばMySQLでは文字セット「utf8mb4」を使うと思いますが、
ご存知の通り、VARCHAR(バイトサイズ指定)でUTF-8の場合は文字によって1~4バイトのサイズであり、実際には何文字入るかわからないです。
MS SQL Serverは NVARCHAR(文字数指定)でUTF16LEで、文字によって2バイト又は4バイト(サロゲートペア)ですね。
(サロゲートペアを2文字とカウントするのか1文字とカウントするのかは知らないです。すいません。)
ご存知の通り、Windowsは内部的にUTF-16LEを使用しますので、DelphiのUnicode版もUTF-16LEを使用しています。
Unicodeと言っても様々なのでややこしいですよね。
//(uses に System.SysUtils が必要)
Length(TEncoding.UTF8.GetBytes('文字列'))
で、UTF16LE⇒UTF8変換したバイト配列の長さを調べるのは一つの方法かもしれません。
外していたらすいません。
-------以下私のホームページのご参考URL-------
MySQLの文字セット
https://mam-mam.net/javascript/mysql_collate.htmlお勉強の為にUTF-8⇒本来のUnicode(21ビット)変換、本来のUnicode(21ビット)⇒UTF-16LE変換関数を公開しているURL
https://mam-mam.net/delphi/convert_utf8.html2023年7月12日水曜日 10:37:11 UTC+9 Hikaru Fukushi: