20 years of UNICODE for the win?
Mar. 30th, 2017 09:05 amAs some of you know I'm back to coding. This morning I was trying to create a SQL table which failed with mysterious errors, like:
I was suspecting a hidden character, so od to the rescue:
Octal 357 273 277? Clearly this is UTF-8 encoding of something invisible. Let's use clisp:
DB=> CREATE TABLE sequence ( sequence_id INTEGER NOT NULL, guid_id INTEGER REFERENCES public.guid(id), sequence_number INTEGER NOT NULL); ERROR: relation "public.guid" does not exist Time: 3.007 ms DB=> \dt guid List of relations Schema | Name | Type | Owner --------+------+-------+---------- public | guid | table | pevaneyn (1 row)
I was suspecting a hidden character, so od to the rescue:
$ od -c failing-command ... 0000140 i d I N T E G E R R E F E R 0000160 E N C E S 357 273 277 g u i d ( i d ...
Octal 357 273 277? Clearly this is UTF-8 encoding of something invisible. Let's use clisp:
[1]> CUSTOM:*TERMINAL-ENCODING* #<ENCODING CHARSET:UTF-8 :UNIX> [2]> (EXT:CONVERT-STRING-FROM-BYTES (vector #o357 #o273 #o277) CUSTOM:*TERMINAL-ENCODING*) "" [3]> (aref (EXT:CONVERT-STRING-FROM-BYTES (vector #o357 #o273 #o277) CUSTOM:*TERMINAL-ENCODING*) 0) #\ZERO_WIDTH_NO-BREAK_SPACE Ok an invisible space got inserted somewhere along the line... At least I'm not getting mad and forgetting basic SQL :)