Skip to content

MySQL table and column names should not be normalized to lowercase #3089

Open
@c00

Description

@c00

Version

1.24.0

What happened?

When using mysql as the engine, the table and column names are normalized to lowercase, losing useful naming conventions from the database. It's a very postgres specific thing that table and column names should be lowercase. But in Mysql this limitation does not exist.

e.g. a column called KapNr will become Kapnr in the generated struct. If I then marshal that into a JSON, even with JSON tags in camelCase it will just become kapnr instead of kapNr.

We can use the rename configuration, but then that configuration is ignored for generating the json tag, so it is still only half a workaround.

For context (feel free to skip), to keep my code simple, the way I name my columns in a database, structs and output JSON are usually as similar as possible. The less mapping from 1 format to another, the better. However, now I am forced to put extra mappings in between with custom structs to fix this.

Relevant log output

No response

Database schema

CREATE TABLE
  `Gruppen` (
    `GrVon` varchar(3) NOT NULL,
    `GrBis` varchar(3) DEFAULT NULL,
    `KapNr` varchar(2) DEFAULT NULL,
    `GrTi` varchar(255) DEFAULT NULL,
    PRIMARY KEY (`GrVon`),
    KEY `KapNr` (`KapNr`),
    CONSTRAINT `Gruppen_ibfk_1` FOREIGN KEY (`KapNr`) REFERENCES `Kapitel` (`KapNr`)
  ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci;

SQL queries

No response

Configuration

version: "2"
sql:
  - engine: "mysql"
    queries: "sql/queries"
    schema: "sql/schema"
    gen:
      go:
        out: "internal/database"
        emit_json_tags: true
        json_tags_case_style: camel
        rename:
          kapnr: "KapNr"

Playground URL

https://play.sqlc.dev/p/28279d28759d2a8d64af19286ee73de6c27b7003d0caa821d0e311652cf01a17

What operating system are you using?

Linux

What database engines are you using?

MySQL

What type of code are you generating?

Go

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingtriageNew issues that hasn't been reviewed

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions