Mysql: рдПрдХ рдирд▓ рдХреЛ *рд╕реНрдЯреНрд░рд┐рдВрдЧ . рдореЗрдВ рд╕реНрдХреИрди рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛

рдХреЛ рдирд┐рд░реНрдорд┐рдд 28 рдлрд╝рд░ре░ 2013  ┬╖  15рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: go-sql-driver/mysql

рдореИрдВ Google Code рдХреЗ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рдерд╛ред рдорд╛рд╕реНрдЯрд░ рдореЗрдВ рдирд╡реАрдирддрдо рдХреЛрдб рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдирд┐рдореНрди рддреНрд░реБрдЯрд┐ рдорд┐рд▓ рд░рд╣реА рд╣реИ рдЬреЛ рдореБрдЭреЗ рдкрд╣рд▓реЗ рдирд╣реАрдВ рдорд┐рд▓реА рдереА:

sql: Scan error on column index 7: unsupported driver -> Scan pair: <nil> -> *string

рдореИрдВ рдФрд░ рдЬрд╛рдВрдЪ рдХрд░реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдЗрд╕ рдмреАрдЪ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдЬрд╛рдирддреЗ рд╣реИрдВ?

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдЪреВрдВрдХрд┐ рдпрд╣ рдкреГрд╖реНрда рдЕрднреА рднреА рдЦреЛрдЬ рдкрд░рд┐рдгрд╛рдореЛрдВ рдореЗрдВ рдХрд╛рдлреА рдКрдВрдЪрд╛ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ, рдореЗрд░реЗ рджреЛ рд╕реЗрдВрдЯ:

рдЖрдк рдЗрд╕реЗ рдЙрд╕ рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ рднреА рд╣рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ, рдЖрдИрдПрдордУ, рд╕рдорд╕реНрдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИ: рдбреЗрдЯрд╛рдмреЗрд╕ рдПрдмреНрд╕реНрдЯреНрд░реИрдХреНрд╢рди рд╕реНрддрд░ред рдЖрдк рдирд┐рдореНрди рдХрд╛рд░реНрдп рдХрд░рдХреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

  SELECT
    id,
    COALESCE(name, '') as name
  FROM users

рдЗрд╕ рддрд░рд╣, рдпрджрд┐ name рдореЗрдВ NULL рд╣реИ, рддреЛ рдЗрд╕реЗ рд╕реНрдХреИрди рдХрд░рддреЗ рд╕рдордп рдПрдХ рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред Coalesce рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рд╕рдорд░реНрдерд┐рдд рд╣реИред

рд╕рднреА 15 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдкреБрд░рд╛рдиреЗ рдХреЛрдб рдиреЗ NULL рдорд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЦрд╛рд▓реА []byte рд▓реМрдЯрд╛рдпрд╛ рдЬрд┐рд╕рд╕реЗ рдПрдХ рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реЗ NULL рдорд╛рди рдХреЛ рдЕрд▓рдЧ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реЛ рдЧрдпрд╛ред
рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП рдЕрдВрдХ #20 рджреЗрдЦреЗрдВред

рдЗрд╕ рд▓рдХреНрд╖реНрдп рдХреЗ рдХрд╛рд░рдг database/sql рдкреИрдХреЗрдЬ рджреНрд╡рд╛рд░рд╛ рддреНрд░реБрдЯрд┐ рд▓реМрдЯрд╛ рджреА рдЧрдИ рд╣реИ:

* Be flexible with type conversions, but be paranoid about silent
  truncation or other loss of precision.

рдпрджрд┐ рдХреЙрд▓рдо рдореЗрдВ NULL рдорд╛рди рд╣реЛ рддреЛ рдЖрдкрдХреЛ http://golang.org/pkg/database/sql/#NullString рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП

рдзрдиреНрдпрд╡рд╛рдж, рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред

рдореБрдЭреЗ рдкреБрд░рд╛рдирд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХрд╛ рд▓рдЧрднрдЧ рдПрдХ рддрд░реАрдХрд╛ рдЪрд╛рд╣рд┐рдПред рдХреБрдЫ рдорд╛рдпрдиреЛрдВ рдореЗрдВ, рдЧреЛ рдХрд╛ "рд╢реВрдиреНрдп рдорд╛рди рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ" рдмрд╣реБрдд рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ рдФрд░ рдПрдХ рдЯрди рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЛрдб рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдЗрд╕реЗ рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ рд╣рд░ рдЬрдЧрд╣ рдмрд┐рдЦреЗрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдЗрд╕реЗ рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░ рд░рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЬреЛ рдХрд┐ рдореБрдЭреЗ рдПрдХ рдиреНрдпреВрд▓ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд╕рдХрддрд╛ рд╣реИред NullString, рдЖрджрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрд╣реБрдд рдмрджрд╕реВрд░рдд рдХреЛрдб-рд╡рд╛рд░ рд╣реИред

рдиреНрдпреВрд▓ рд╕рд┐рд░реНрдл рдПрдХ рджреБрдГрд╕реНрд╡рдкреНрди рд╣реИ рдФрд░ рдореИрдВ рдПрдирдпреВрдПрд▓рдПрд▓ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдореИрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ _my_ рдЯреЗрдмрд▓ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓рдо рдХреЛ рдиреНрдпреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдХрднреА-рдХрднреА SHOW PROCESSLIST рдЬреИрд╕реЗ рдХрдорд╛рдВрдб рдореЗрдВ рдПрдХ NULL рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдореЗрд░рд╛ рдХреЛрдб рдмрд╕ рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ; рдореБрдЭреЗ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЪрд╛рд╣рд┐рдПред рдореИрдВ рдмрд╕ рдПрдХ рдирд▓рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рдЗрд╕рдХреА .Valid рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдмрд╕ рдЗрд╕рдХреА .String рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реВрдВ, рдЬреЛ рдХреЙрд▓рдо рдиреНрдпреВрд▓ рд╣реЛрдиреЗ рдкрд░ рдЦрд╛рд▓реА рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП NULL рдХреЛ рд╢реВрдиреНрдп-рдорд╛рди рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рдмрддрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рдирд╛рддреЗ (рдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдХрд░реЗрдЧрд╛, рдЪрд░ рдореЗрдВ рдХреЙрд▓рдо рдХреЛ рд╕реНрдХреИрди рдХрд░рдирд╛ рдЫреЛрдбрд╝ рджреЗрдЧрд╛) рдмрд╣реБрдд рдХрдард┐рди рдФрд░ рддреНрд░реБрдЯрд┐ рдкреНрд░рд╡рдг рдХреЛ рдХрдо рдХрд░реЗрдЧрд╛ (рдФрд░ рдирд╣реАрдВ- рднрд╡рд┐рд╖реНрдп рдХреЗ рд╕рдмреВрдд) рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдпрд╛, рдЕрдЧрд░ рдореБрдЭреЗ рд╕рднреА рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЛрдб рдирд╣реАрдВ рдЪрд╛рд╣рд┐рдП, рддреЛ рдореИрдВ рдЕрдкрдиреЗ рдореМрдХреЗ рд▓реЗ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдХреЙрд▓рдо рдП) рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЧреИрд░-рд╢реВрдиреНрдп рд╣реИ рдмреА) рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рд░рд╣реЗрдЧрд╛ред

рдореИрдВ рдЧреЛ рдХреА "рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╢реВрдиреНрдп рдорд╛рди" рдиреАрддрд┐ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛рдмреЗрд╕/рдПрд╕рдХреНрдпреВрдПрд▓ рдкреИрдХреЗрдЬ рдХреЛ рднреА рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ред рдпрджрд┐ рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рддреЛ рдЖрдк рдЕрднреА рднреА рдирд▓ * рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдЕрдВрддрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдбрд┐рдЬрд╛рдЗрди рдирд┐рд░реНрдгрдп рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рдЗрд╕реЗ рдЧреЛ 2 (рдЙрд╕рдХреЗ рд▓рд┐рдП рдореБрдЭрд╕реЗ +1) рдореЗрдВ рдмрджрд▓ рджреЗрдВред
рдЕрднреА рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдкрд╛рд╕ рдЙрд╕рдХреЗ рд▓рд┐рдП рдбреНрд░рд╛рдЗрд╡рд░ рд╡рд┐рдХрд▓реНрдк рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреЛрдИ рдпреЛрдЬрдирд╛ рдирд╣реАрдВ рд╣реИред PostgreSQL рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдЧрдбрд╝рдмрдбрд╝ рд╣реИ (рдХрдард┐рди рдореИрдВ рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рдорд╛рдирддрд╛ рд╣реВрдВ)ред рдореИрдВ рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдЧрдбрд╝рдмрдбрд╝ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ред
рд╕реНрдХреИрди рдХреА рдЧрдИ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ str = nullStr.Value рдЕрдзрд┐рдХ рдЕрдм рдХреЗ рд▓рд┐рдП рдХрдо рдмреБрд░рд╛рдИ рд╣реИред

рдореИрдВрдиреЗ рд╢реВрдиреНрдп NULL рдорд╛рдиреЛрдВ рдореЗрдВ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛: https://github.com/Go-SQL-Driver/MySQL/tree/zeroNULL
рд▓реЗрдХрд┐рди рдбреНрд░рд╛рдЗрд╡рд░ рд╕реНрддрд░ рдкрд░ рдпрд╣ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдЖрдк рд╢реВрдиреНрдп рдорд╛рди рдХреЛ []byte{} рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдЗрд╕реЗ string рдФрд░ []byte рдкрд░ рд╕реНрдХреИрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВред рдпрджрд┐ рдЖрдк рдЗрд╕реЗ 0 рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕реЗ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рд╕реНрдХреИрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ "0" рдПрдХ string / []byte ред

рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рдХрд┐ рдбреНрд░рд╛рдЗрд╡рд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреИрд╕реЗ рд╕реНрдХреИрди рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдмрдЬрд╛рдп
рдирд┐рдпрддрд┐ [i] рдХреЛ рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдкрд░ рд╕реЗрдЯ рдХрд░рдирд╛, рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдбреНрд░рд╛рдЗрд╡рд░ рдмрд╕ рд╕реЗрдЯрд┐рдВрдЧ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ
рдЧрдВрддрд╡реНрдп [рдореИрдВ]?

dest рдореВрд▓ рд░реВрдк рд╕реЗ рдПрдХ []interface{} рдЯреБрдХрдбрд╝рд╛ рд╣реИред interface{} рдХрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди nil ред рддреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЛ рдЫреЛрдбрд╝ dest[i] рдХрд░рдиреЗ рдХреЗ рд╕рдорд╛рди рд╣реА рдкрд░рд┐рдгрд╛рдо рд╣реИ dest[i]=nil

рдореИрдВрдиреЗ рд╢рд╛рдЦрд╛ рдХреЛ рдЕрджреНрдпрддрди рдХрд┐рдпрд╛ред рдЖрдк рдЪрд╛рд╣реЗрдВ рддреЛ рдЗрд╕реЗ рдЕрдкрдиреЗ рд▓рд┐рдП рдЖрдЬрдорд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдпрд╣ рдореЗрд░реА рдЬрд╝рд░реВрд░рддреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХрджрдо рд╕рд╣реА рд▓рдЧрддрд╛ рд╣реИ, рдФрд░ рдЕрдЧрд▓реА рдмрд╛рд░ рдЬрдм рдореИрдВ рдЕрдкрдирд╛ рдЕрдкрдбреЗрдЯ рдХрд░реВрдБрдЧрд╛ рддреЛ рдореИрдВ рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛рдКрдБрдЧрд╛
рдЪрд╛рд▓рдХ рдХреА рдкреНрд░рддрд┐ред

рдореЗрд░реЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рдПрдХ рдФрд░ рд╕рдорд╛рдзрд╛рди рдЖрдпрд╛:
рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдмрдЬрд╛рдп рдмрд╕ [] рдмрд╛рдЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдПрдХ рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ nil-[]byte рдкрд░рд┐рдгрд╛рдо рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдирд╛:

string([]byte(""))  // => ""
string([]byte(nil)) // => ""

http://play.golang.org/p/nivY1yBK3x

рд╢рд╛рдпрдж рдЗрд╕реЗ рдЦреБрд▓рд╛ рд░рдЦреЗрдВ, рд╢рд╛рдпрдж рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд╣реЛ

рд╕рдорд╛рдзрд╛рди: https://github.com/guregu/null

рдЪреВрдВрдХрд┐ рдпрд╣ рдкреГрд╖реНрда рдЕрднреА рднреА рдЦреЛрдЬ рдкрд░рд┐рдгрд╛рдореЛрдВ рдореЗрдВ рдХрд╛рдлреА рдКрдВрдЪрд╛ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ, рдореЗрд░реЗ рджреЛ рд╕реЗрдВрдЯ:

рдЖрдк рдЗрд╕реЗ рдЙрд╕ рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ рднреА рд╣рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ, рдЖрдИрдПрдордУ, рд╕рдорд╕реНрдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИ: рдбреЗрдЯрд╛рдмреЗрд╕ рдПрдмреНрд╕реНрдЯреНрд░реИрдХреНрд╢рди рд╕реНрддрд░ред рдЖрдк рдирд┐рдореНрди рдХрд╛рд░реНрдп рдХрд░рдХреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

  SELECT
    id,
    COALESCE(name, '') as name
  FROM users

рдЗрд╕ рддрд░рд╣, рдпрджрд┐ name рдореЗрдВ NULL рд╣реИ, рддреЛ рдЗрд╕реЗ рд╕реНрдХреИрди рдХрд░рддреЗ рд╕рдордп рдПрдХ рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред Coalesce рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рд╕рдорд░реНрдерд┐рдд рд╣реИред

рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рдХрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╢реВрдиреНрдп рд╣реЛрдиреЗ рдкрд░ рдЕрдкрд╡рд╛рдж рдХреНрдпреЛрдВ рдлреЗрдВрдХрддрд╛ рд╣реИ?

рдЖрдк рдЗрд╕рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреЙрдЗрдВрдЯрд░ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

var txt *string
checkErr(result.Scan(&txt))
// do something with type *string

рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

@Dynom рдорд╣рд╛рди рдЯрд┐рдкреНрдкрдгреА рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрднреА рднреА рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ sql.NullString рдкреНрд░рдХрд╛рд░ рдХрд╛рдо рдЖрддрд╛ рд╣реИ рдпрджрд┐ рдЖрдк Scan рдХреЗ рдЧрдВрддрд╡реНрдп рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рдЬрд┐рд╕реЗ рдореИрдВ рдЧреЛ рдкрдХреНрд╖ рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ) рдбреЗрдЯрд╛рдмреЗрд╕ рдЕрдореВрд░реНрдд рд╕реНрддрд░)ред

рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдпрд╣ nil рдорд╛рди рдФрд░ рдПрдХ рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рдмрд░рдХрд░рд╛рд░ рд░рдЦрддрд╛ рд╣реИ ред

рдирд▓рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рде, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдЬреЗрд╕рди рдЬреИрд╕реА рдЬрд╛рдирдХрд╛рд░реА рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рджреЗрд╡ рдХреЛ рдирдХреНрд╢рд╛ рд╡реАрдУ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрд╣рд╛рдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рдПрдХ рдЕрдЪреНрдЫрд╛ рдФрд░ рд╕рд╣реА рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рд╕рднреА рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИ рддреЛ рднрд╛рд╖рд╛ рдХреА рд╕реАрдорд╛ рд╕реЗ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

PingGao89 picture PingGao89  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

posener picture posener  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

julienschmidt picture julienschmidt  ┬╖  7рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

victormongi picture victormongi  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

dwlnetnl picture dwlnetnl  ┬╖  7рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ