text: Title: URL.render_as_string doesn't always give an URL that is parsed same way
  Body: ### Describe the bug
  
  So the code below fails because database is not escaped
  
  ### Optional link from https://docs.sqlalchemy.org which documents the behavior that is expected
  
  _No response_
  
  ### SQLAlchemy Version in Use
  
  2.0.1
  
  ### DBAPI (i.e. the database driver)
  
  sqlite
  
  ### Database Vendor and Major Version
  
  sqlite
  
  ### Python Version
  
  3.11
  
  ### Operating system
  
  linux
  
  ### To Reproduce
  
  ```python
  import sqlalchemy
  from sqlalchemy.engine import URL
  first_url = URL.create('sqlite', username=None, password=None, host=None, port=None, database="a?b=c") # I could have this filename
  first_url_as_string = first_url.render_as_string()
  second_url = sqlalchemy.make_url(first_url_as_string)
  assert first_url.database == second_url.database, f"Fail, expected: {first_url.database} found: {second_url.database}"
  ```
  
  
  ### Error
  
  ```
  AssertionError: Fail, expected: a?b=c found: a
  ``` 
  
  ### Additional context
  
  I didn't see any doc that claims that this should be roundtrip conversion, but it seems it's intended to be because there's escaping of other fields.
  
  