理解できません。私は本当にそれを手に入れたことはありませんでしたが、今は本当に迷っています。データベースは utf8、テーブルは utf8、列は utf8 です。一部のデータは latin1/iso-8859-1 であるため、正しく表示されません。(今は気にしません。) 以前はすべて latin1 でしたが、現在は 50/50 で、さらに悪化しています。
すべての utf8 を使用するように接続に具体的に指示しない場合、すべてのクエリが機能し、すべてのデータが正しく表示されます (間違って保存されている場合でも)。これは、ストレージが間違っており (utf8 の latin1)、接続が「間違っている」 (デフォルトの latin1 だと思います) ため、互いに相殺されます。文字はOKでエラーはありません。しかし、データベースにはがらくたが含まれているため、明らかに受け入れられません。
だから私はすべてutf8が欲しいので、MySQLに具体的に伝えます(毎回最初のクエリ):
SET NAMES 'utf8' COLLATE 'utf8_general_ci'
そして、どういうわけか、次のクエリは失敗します。
SELECT
r.id,
r.slots,
r.start_time AS StartA,
ADDTIME(r.start_time, SEC_TO_TIME(60*r.slots*s.slotsize)) AS EindA,
'14:30:00' AS StartB,
'15:30:00' AS EindB
FROM
club_sports s, resources c, reservations r
WHERE
r.resource_id = c.id AND
c.club_sport_id = s.id AND
r.not_cancelled = '1' AND
r.resource_id = 25 AND
r.date = '2013-01-18'
HAVING
(
(StartA >= StartB AND StartA < EindB) OR
(EindA >= StartB AND EindA < StartB) OR
(StartB >= StartA AND StartB < EindA) OR
(EindB >= StartA AND EindB < StartA)
)
LIMIT 1
次のエラーで:
操作 '<' の照合 (utf8_general_ci,COERCIBLE) と (latin1_swedish_ci,NUMERIC) の不正な組み合わせ
理解できません!どこで入手できますlatin1_swedish_ci,NUMERIC
か?? HAVING のすべての部分は数値ではなく、すべて同じ utf8 ですよね? ソース テーブルと列は utf8 です。
クエリが完全ではないことはわかっていますが、それは今のところ関係ありません。''
HAVINGでfake/tmp列を作成して比較できるはずですよね?
json_encode には本当に utf8 が必要なので、データを utf8 にする必要があるため、データベースを utf8 にする必要があるため、接続を utf8 にする必要があります。ヘルプ!