フリーランスのためのネットビジネス専門学校 ネットで独立開業を目指す人を応援
フリーランスのためのネットビジネス専門学校 ネットで独立開業を目指す人を応援

LaravelをAPIサーバとしてしか使わない(ので不要なしくみを排除したい)

前提

・PHP 5.6.38
・SQL Server 12.0.2000.8
・対象のテーブルとデータ
MyCats

ID(INT) Name(NVARCHAR(32))
1 バブルス🐣
2 ブロッサム🐈
3 バターカップ😇

登録の際はphp側でデータを変換してからSQLでinsertしています。

sample.php
$name = mb_convert_encoding($name, 'UTF-16LE','UTF-8');
$name = bin2hex($name);
$name = '0x' . $name;
INSERT
 MyCats(ID, Name)
VALUES
 (4, CONVERT(varbinary(MAX), N'{$name}', 1));

こうすることで4バイト文字のデータを保持しています。
参考:freetds + SQLServer で絵文字をSELECT, INSERTする

方法

やはりまずphpで変換します。

sample.php
$name = mb_convert_encoding($name, 'UTF-16LE','UTF-8');
$name = bin2hex($name);
$name = '0x' . $name;

そして

SELECT ID, Name FROM MyCats WHERE Name LIKE '%' + CONVERT(NVARCHAR(32), {$name}) + '%';

っていうのでできました。
他にもやり方あるのかもしれませんが、一応これでできましたという一例でした。

コメント

記事に戻る

コメントを残す